/**
 * http://usejsdoc.org/
 * 处理表的应用关系，便于生成实体类和数据库访问层
 */
let ejs = require('../../ejs/ejsUtil.js');
let path=require('path');

function handlerRef(table,tableName,allData) {
	//只有field中有外键
	var fields=[].concat(table.field);
	fields.forEach((item)=>{
		var reftable=item.attr["@_references_table"];
		var refcol=item.attr["@_references_col"];
		var isRef=reftable&&item.attr["@_references_col"];
		//查看是否有引用关系，如果没有就是simple
		var refType=item.attr["@_refType"];
		refType=refType?refType:"simple";

		//迭代所有的字段为引用的表加上引用关系
		if(isRef){
			var targetTable=allData[reftable];//获取到目标表对象
			// var curTable=table[reftable];

			if(targetTable){//如果目标表存在
				if(!targetTable.refs){//如果引用列表不存在
					targetTable.refs=[];
				}
				//目标表加上引用的信息，注意：refs表示被引用
				targetTable.refs.push({
					table:tableName,
					col:refcol,
					type:refType

				});

				if(!table.beRefs){
					table.beRefs=[];
				}
				//给自己的表上加入引用信息，注意beRefs表示引用
				table.beRefs.push({
					table:reftable,
					col:refcol,
					type:"simple"
				});
			}else{
				throw new Error("引用的目标表不存在:"+reftable);
			}
		}
	});
}

exports.handler=function(data){
	for(var index in data.tables){
		handlerRef(data.tables[index],index,data.tables);//处理表的引用
	}
	
}
